package name.huliqing.qfaces.temp;
///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//package name.huliqing.qfaces;
//
//import java.io.IOException;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.logging.Logger;
//
//import javax.faces.component.UIComponent;
//import javax.faces.context.FacesContext;
//import javax.faces.context.ResponseWriter;
// 
///**
// * @deprecated 以后请使用ResLoader2代替
// * @author huliqing
// */ 
//public class ResLoader {
//	private final static Logger logger = Logger.getLogger(ResLoader.class.getName());
//	private static ResLoader ins = null;
//	private ResLoader(){}
//	public synchronized static ResLoader getInstance() {
//		if (ins == null) {
//			ins = new ResLoader();
//		}
//		return ins;
//	}
//	
//	// ---- 必要的输出到客户端的CSS
//	private final static String[] RES_CSS = {
//    	"name/huliqing/qfaces/resource/style.css"
//    };
//	
//	// ---- 必要的输出到客户端的js
//	private final static String[] RES_JAVASCRIPT = {
//        "name/huliqing/qfaces/resource/QFaces-Utils.js",
//        "name/huliqing/qfaces/resource/QFaces-Faces.js"
//    };
//	
//    
//	public final void loadRequired() throws IOException {
//        // 创建resourceMap并装载必要的资源,
//        // 同时将ContextPath及viewId发送到客户端
//        FacesContext fc = getFacesContext();
//        Map<String, Object> requestMap = fc.getExternalContext().getRequestMap();
//        Map<String, String> resource = (Map<String, String>) requestMap.get(Constant.QFACES_RESOURCE);
//        if (resource == null) {
//        	logger.fine("加载QFaces必要的资源文件...");
//            resource = new HashMap<String, String>();
//            // .载入必要的CSS资源
//            for (String css : RES_CSS) {
//            	loadCSS(css);
//            }
//            // .载入必要的javascript资源,并标志已经载入
//            for (String res : RES_JAVASCRIPT) {
//                loadJavascript(res);
//                resource.put(res, "true");
//            }
//            // .客户端必要的信息
//            setContextPathToClient(fc);
//            
//            // 将标识放入request中,这表示在这一次请求中已经载入过相应的资源文件
//            requestMap.put(Constant.QFACES_RESOURCE, resource);
//        }
//    }
//
//    /**
//     * 
//     * 输出javascript资源
//     * @param path javascript路径信息,可能像这样: name/huliqing/qfaces/resource/QFaces.js
//     * @param ui 当前组件
//     * @throws java.io.IOException
//     */
//	public final void loadJavascript(String path, UIComponent ui) throws IOException {
//		loadJavascript(path, ui.getClass());
//    }
//	
//	/**
//	 * 输出javascript资源
//	 * @param path javascript路径信息,可能像这样: name/huliqing/qfaces/resource/QFaces.js
//	 * @param class 用于标识某一个组件或class所用到的javascript,可避免重复载入js资源
//	 * @throws java.io.IOException
//	 */
//	public final void loadJavascript(String path, Class<? extends Object> clazz) throws IOException {
//		logger.fine("loadJavascript:" + path);
//		loadRequired(); // 这一句是必要的.偿试加载必要的资源
//		FacesContext fc = getFacesContext();
//		Map<String, Object> requestMap = fc.getExternalContext().getRequestMap();
//		Map<String, String> resource = (Map<String, String>) requestMap.get(Constant.QFACES_RESOURCE);
//		if (!resource.containsKey(path)) {
//			loadJavascript(path);
//			resource.put(path, clazz.getName()); // 记住该组件的js已经装载完毕
//		}
//	}
//
//    /**
//     * 输出图片资源
//     * @param path 图片路径,可能像这样: name/huliqing/qfaces/resource/QFaces.png
//     * @throws java.io.IOException
//     */
//    public final void loadImage(String path) throws IOException {
//        FacesContext fc = getFacesContext();
//        String contextPath = fc.getExternalContext().getRequestContextPath();
//        ResponseWriter w = fc.getResponseWriter();
//        w.startElement("img", null);
//        w.writeAttribute("style", "border:0;margin:0;padding:0;", null);
//        w.writeAttribute("src", contextPath + Constant.PREFIX_RES_IMAGE + path + "." + Constant.SUFFIX, null);
//        w.endElement("img");
//    }
//
//    /**
//     * 将资源包里的图片路径转化为qfaces可以识别的路径
//     * @param path
//     * @return full src
//     */
//    public final String makeImageSrc(String path) {
//        FacesContext fc = getFacesContext();
//        String contextPath = fc.getExternalContext().getRequestContextPath();
//        return (contextPath + Constant.PREFIX_RES_IMAGE + path + "." + Constant.SUFFIX);
//    }
//    
//    // ---------- private 
//    
//    private final void loadCSS(String path) throws IOException {
//        FacesContext fc = getFacesContext();
//        String contextPath = fc.getExternalContext().getRequestContextPath();
//        ResponseWriter w = fc.getResponseWriter();
//        w.startElement("link", null);
//        w.writeAttribute("type", "text/css", null);
//        w.writeAttribute("rel", "stylesheet", null);
//        w.writeAttribute("href", contextPath + Constant.PREFIX_RES_CSS + path + "." + Constant.SUFFIX, null);
//        w.endElement("link");
//    }
//    
//    private final void loadJavascript(String path) throws IOException {
//        FacesContext fc = getFacesContext();
//        String contextPath = fc.getExternalContext().getRequestContextPath();
//        ResponseWriter w = fc.getResponseWriter();
//        w.startElement("script", null);
//        w.writeAttribute("type", "text/javascript", null);
//        w.writeAttribute("src", contextPath + Constant.PREFIX_RES_JAVASCRIPT + path + "." + Constant.SUFFIX, null);
//        w.endElement("script");
//    }
//    
//    /**
//     * 将一些必须的信息输出到客户端
//     * @param fc
//     */
//    private final void setContextPathToClient(FacesContext fc) throws IOException {
//        String contextPath = fc.getExternalContext().getRequestContextPath();
//        String QFaces_contextPath = "QFaces.Faces.contextPath = \"" + contextPath + "\";";
//        String QFaces_viewId = "QFaces.Faces.viewId = \"" + fc.getViewRoot().getViewId() + "\";";
//        String QFaces_suffix = "QFaces.Faces.suffix = \"" + Constant.SUFFIX + "\";";
//        String QFaces_loadingSrc = "QFaces.Faces.loadingSrc = \"" + makeImageSrc(Constant.QFACES_LOADING) + "\";";
//        ResponseWriter w = fc.getResponseWriter();
//        w.startElement("script", null);
//        w.writeAttribute("type", "text/javascript", null);
//        w.writeText(QFaces_contextPath, null);
//        w.writeText(QFaces_viewId, null);
//        w.writeText(QFaces_suffix, null);
//        w.writeText(QFaces_loadingSrc, null);
//        w.endElement("script");
//    }
//    
//    private final FacesContext getFacesContext() {
//        FacesContext fc = FacesContext.getCurrentInstance();
//        if (fc == null)
//            throw new NullPointerException(ResLoader.class.getName());
//        return fc;
//    }
//}
